﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace paroecia
{
    public class Wartosc
    {
        public string nazwaKolumny;
        public string wartoscOd;
        public string wartoscDo;
        public Wartosc(string nazwaKolumny, string wartoscPoczatkowa, string wartoscKoncowa=null) {
            this.nazwaKolumny=nazwaKolumny;
            this.wartoscOd=wartoscPoczatkowa;
            this.wartoscDo=wartoscKoncowa;
        }
    }
    public class Zapytanie
    {
        public static string Select(string nazwaTabeli, string uporzadkujWedlug, string[] wyswietlKolumny, params Wartosc[] wartosci){
            string s;
            nazwaTabeli=nazwaTabeli.Trim();
            nazwaTabeli=nazwaTabeli.ToLower();
            switch (nazwaTabeli)
            {
                case "ludzie":
                    s = SelectLudzie(nazwaTabeli, uporzadkujWedlug, wyswietlKolumny, wartosci);
                    break;
                /*case "ludziewszyscy":
                    s = SelectLudzieWszyscy(nazwaTabeli, uporzadkujWedlug, wyswietlKolumny, wartosci);
                    break;
                case "chrzty":
                    s = SelectChrzty(nazwaTabeli, uporzadkujWedlug, wyswietlKolumny, wartosci);
                    break;
                case "sluby":
                    s = SelectSluby(nazwaTabeli, uporzadkujWedlug, wyswietlKolumny, wartosci);
                    break;
                case "zgony":
                    s = SelectZgony(nazwaTabeli, uporzadkujWedlug, wyswietlKolumny, wartosci);
                    break;
                case "Akty":
                    s = SelectAkty(nazwaTabeli, uporzadkujWedlug, wyswietlKolumny, wartosci);
                    break;*/
                default:
                    s="BŁĄD PROGRAMU";
                    break;
            }
            return s;
        }
        public static string SelectLudzie(string nazwaTabeli, string uporzadkuj, string[] kolumny, Wartosc[] wartosci){
            string s = "SELECT ";
            int opcje = 1;
            foreach (string i in kolumny)
            {
                if (i.ToLower().Equals("parafia"))
                {
                    s = s + "b.paraf AS Parafia";
                    opcje *= 2;
                }
                else if (i.ToLower().EndsWith("ojca"))
                {
                    s = s + "c." + i.Split(' ')[0]+", ";
                    opcje *= 3;
                }
                else if(i.ToLower().EndsWith("matki"))
                {
                    s = s + "d." + i.Split(' ')[0]+", ";
                    opcje *= 5;
                }
                else
                {
                    s = s + "a.\"" + i + "\", ";
                }
            }
            s=s.Remove(s.Length-2);
            s=s+" FROM a."+nazwaTabeli;
            if(wartosci!=null && wartosci.Length>0){
                s+=" WHERE ";
                string stara="";
                foreach(Wartosc i in wartosci){
                    if(stara.Equals(i.nazwaKolumny)){
                        s+=" OR ";
                    }else if(stara.Equals("")){
                        s+="( ";
                    }else{
                        s+=") AND (";
                    }
                    if(i.wartoscDo==null){
                        if(i.nazwaKolumny.ToLower().Equals("parafia")){
                            s+="b.paraf";
                        }else if(i.nazwaKolumny.ToLower().Equals("ojca")){
                            s+="c."+i.nazwaKolumny.Split(' ')[0];
                        }else if(i.nazwaKolumny.ToLower().Equals("matki")){
                            s+="d."+i.nazwaKolumny.Split(' ')[0];
                        }else{
                            s=s+"a.\""+i.nazwaKolumny+"\"";
                        }
                        s=s+"="+i.wartoscOd;
                    }else{
                        s=s+"(a.\""+i.nazwaKolumny+"\">="+i.wartoscOd+" AND a.\""+i.nazwaKolumny+"\"<="+i.wartoscDo+")";
                    }
                }
                s+=")";
            }
            if(uporzadkuj!=null){
                s=s+" ORDER BY "+uporzadkuj;
            }
            return s;
        }
        /*static void Main ( string args[] ){
            string[] x={"imię", "NaZwisko", "parafia", "nazwisko OJCA", "IMIE Matki"};
            Console.WriteLine(Zapytanie.Select("LUDzIe", "nAzWiSkO", x,
                new Wartosc("Nazwisko", "Solon"), new Wartosc("Nazwisko", "Mlody"),
                new Wartosc("wyznanie", "Katolik")));
        }*/
    }
}
